package com.kaizeli.website.service;

import com.kaizeli.website.pojo.dto.ChangePasswordDTO;
import com.kaizeli.website.pojo.dto.UserLoginDTO;
import com.kaizeli.website.pojo.dto.UserRegisterDTO;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;
import java.util.Map;

/**
 * 用户服务接口
 */
public interface UserService {
    
    /**
     * 创建用户（管理员专用，密码自动加密）
     * @param dto 用户注册信息
     * @param currentUsername 当前操作用户的用户名（用于权限检查）
     */
    Map<String, Object> createUser(UserRegisterDTO dto, String currentUsername);
    
    /**
     * 用户登录（生成token）
     */
    Map<String, Object> login(UserLoginDTO dto, HttpServletRequest request);
    
    /**
     * 验证token
     */
    Map<String, Object> validateToken(String token);
    
    /**
     * 登出（销毁token）
     */
    Map<String, Object> logout(String token);
    
    /**
     * 修改密码
     * @param dto 修改密码信息
     * @param currentUsername 当前用户名
     */
    Map<String, Object> changePassword(ChangePasswordDTO dto, String currentUsername);
    
    /**
     * 获取所有在职员工列表（用于创建普通用户时选择）
     */
    List<Map<String, Object>> getActiveEmployees();
    
    /**
     * 删除用户
     * @param targetUsername 要删除的用户名
     * @param currentUsername 当前操作用户的用户名（用于权限检查）
     */
    Map<String, Object> deleteUser(String targetUsername, String currentUsername);
    
    /**
     * 提升用户为总管理员（仅总管理员可用）
     * @param targetUsername 要提升的用户名
     * @param currentUsername 当前操作用户的用户名（用于权限检查）
     */
    Map<String, Object> promoteToSuperAdmin(String targetUsername, String currentUsername);
    
    /**
     * 提升子管理员为管理员（管理员及以上可用）
     * @param targetUsername 要提升的用户名
     * @param currentUsername 当前操作用户的用户名（用于权限检查）
     */
    Map<String, Object> promoteToAdmin(String targetUsername, String currentUsername);
    
    /**
     * 获取所有用户列表（管理员可查看）
     */
    List<Map<String, Object>> getAllUsers();
}

